//#include <stdio.h>
//#include <stdlib.h>
//#include <math.h>
//
//typedef long long ll;
//
//typedef struct 
//{
//    ll d_sq;
//    int v;
//} Point;
//
//int compare(const void* a, const void* b) 
//{
//    Point* p1 = (Point*)a;
//    Point* p2 = (Point*)b;
//    if (p1->d_sq < p2->d_sq) return -1;
//    else if (p1->d_sq > p2->d_sq) return 1;
//    else return 0;
//}
//
//int main() 
//{
//    int n;
//    ll S;
//    scanf_s("%d %lld", &n, &S);
//    Point* points = (Point*)malloc(n * sizeof(Point));
//    ll total_sum = 0;
//    for (int i = 0; i < n; i++)
//    {
//        int x, y, v;
//        scanf_s("%d %d %d", &x, &y, &v);
//        ll d_sq = (ll)x * x + (ll)y * y;
//        points[i].d_sq = d_sq;
//        points[i].v = v;
//        total_sum += v;
//    }
//
//    if (total_sum < S)
//    {
//        printf("-1\n");
//        free(points);
//        return 0;
//    }
//
//    qsort(points, n, sizeof(Point), compare);
//
//    ll current_sum = 0;
//    double ans = 0;
//    for (int i = 0; i < n; i++) 
//    {
//        current_sum += points[i].v;
//        if (current_sum >= S)
//        {
//            ans = sqrt(points[i].d_sq);
//            break;
//        }
//    }
//
//    printf("%.10lf\n", ans);
//    free(points);
//    return 0;
//}

#include <stdio.h>
#include <stdlib.h>

int n, m;
long long c[50];

int is_possible(long long k) {
    long long needed = 0;
    for (int i = 0; i < n; i++) {
        if (c[i] < k) {
            needed += k - c[i];
            if (needed > m) {
                return 0;
            }
        }
    }
    return 1;
}

long long max_k() {
    long long left = 0;
    long long right = 0;
    for (int i = 0; i < n; i++) {
        if (c[i] > right) {
            right = c[i];
        }
    }
    right += m;
    long long best = 0;
    while (left <= right) {
        long long mid = left + (right - left) / 2;
        if (is_possible(mid)) {
            best = mid;
            left = mid + 1;
        }
        else {
            right = mid - 1;
        }
    }
    return best;
}

int main() {
    scanf_s("%d %d", &n, &m);
    for (int i = 0; i < n; i++) {
        scanf_s("%lld", &c[i]);
    }
    printf("%lld\n", max_k());
    return 0;
}